#ifndef SERVERSSETTINGSDIALOG_H
#define SERVERSSETTINGSDIALOG_H

#include <QDialog>
#include <QListWidgetItem>

namespace Ui {
class ServersSettingsDialog;
}

class ServersSettingsDialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit ServersSettingsDialog(QWidget *parent = nullptr);
    ~ServersSettingsDialog();
    int getUrlNumber() const;
    bool isJsonValid(const QString& json) const;
    bool updateJson(int index, QString json, bool display);
    QString getFinalKeys(const QString& keys);
    QListWidgetItem* createItem(const QString& text);
    void create();
    void removeAt(int index);
    void restore();
    void clearBackup();
    void backup(const QString& serverUrl, const QString& json, const QString& keys);
    void backup();
    void save();
    void reload();
    void clear(bool clearBackup);
    void recordServerUrl(const QString& serverUrl, bool display);
    
    const static QString SERVERS_CONFIG_DIR;
    static QString compressJson(const QString& json);
    static QString getPrettyJson(const QString& json);
    static QString getFinalJson(QString jsonTemplate, QString inputStr);
    static bool parse(const QString& configPath, QString& serverURL, QString& json, QString& keys);
signals:
    void signal_update();
protected:
    virtual void closeEvent(QCloseEvent *e) override;

private slots:
    void on_pushButtonNew_clicked();
    void on_pushButtonRemove_clicked();
    void on_listWidgetServerUrlList_currentRowChanged(int currentRow);
    void on_pushButtonSave_clicked();
    void on_pushButtonRestore_clicked();
    void on_pushButtonClose_clicked();
    void on_pushButtonReload_clicked();
    void on_plainTextEditJsonFormat_textChanged();
    void on_listWidgetServerUrlList_itemChanged(QListWidgetItem *item);
    void on_lineEditTargetDataKeys_textChanged(const QString&);

private:
    QStringList jsonList;
    QStringList serverUrlList;
    QStringList keysList;
    QStringList backupJsonList;
    QStringList backupServerUrlList;
    QStringList backupKeysList;
    
    Ui::ServersSettingsDialog *ui;
    
    const static QString keyword;
};

#endif // SERVERSSETTINGSDIALOG_H
